qx.Class.define("mutual.formPersona", {
			extend : qx.ui.groupbox.GroupBox,
			events : {
				"cancelar" : "qx.event.type.Event"
			},
			construct : function(idPersona) {
				this.base(arguments);
				this.setLayout(new qx.ui.layout.VBox(5));

				this.txtDni = new qx.ui.form.TextField(); 
				this.txtDni.setMaxLength(8);
				this.txtNroControl1 = new qx.ui.form.TextField();
				this.txtNroControl2 = new qx.ui.form.TextField();
//				this.txtNroControl.setMaxLength(5);
				this.txtApellido = new qx.ui.form.TextField();
				this.txtNombre = new qx.ui.form.TextField();
				var dateFormat = new qx.util.format.DateFormat("dd/MM/yyyy");
				this.dtFechaNacimiento = new qx.ui.form.DateField();
				this.dtFechaNacimiento.setDateFormat(dateFormat);
				this.txtDomicilio = new qx.ui.form.TextField();
				this.txtCP = new qx.ui.form.TextField();
				this.txtCBU = new qx.ui.form.TextField();
				var frmPersona = this;
				this.filterLocalidad = new mutual.filterLocalidades(10, function(){
					var idLocalidad = this.getSelectedEntity().value;
					if (!idLocalidad){
						return;
					}
					var localidad = this.getLocalidad(idLocalidad);
					frmPersona.txtCP.setValue(localidad.cp);
				});
				this.txtCargo = new qx.ui.form.TextField();
				this.txtLugarTrabajo = new qx.ui.form.TextField();

				this.btnAceptar = new qx.ui.form.Button("Aceptar");
				this.btnAceptar.addListener("execute", function() {
							this.persistPersona(idPersona);
						}, this);
				this.btnCancelar = new qx.ui.form.Button("Cancelar");
				this.btnCancelar.addListener("execute", function() {
							this.fireEvent("cancelar");
							this.destroy();
						}, this);

				this.add(new qx.ui.basic.Label("Dni: "));
				this.add(this.txtDni);
				this.add(new qx.ui.basic.Label("Nro Control 1: "));
				this.add(this.txtNroControl1);
				this.add(new qx.ui.basic.Label("Nro Control 2: "));
				this.add(this.txtNroControl2);
				this.add(new qx.ui.basic.Label("Apellido: "));
				this.add(this.txtApellido);
				this.add(new qx.ui.basic.Label("Nombre: "));
				this.add(this.txtNombre);
				this.add(new qx.ui.basic.Label("Fecha Nac.: "));
				this.add(this.dtFechaNacimiento);
				this.add(new qx.ui.basic.Label("Domicilio: "));
				this.add(this.txtDomicilio);
				this.add(new qx.ui.basic.Label("Localidad: "));
				this.add(this.filterLocalidad);
				this.add(new qx.ui.basic.Label("Cod. Postal: "));
				this.add(this.txtCP);
				this.add(new qx.ui.basic.Label("Cargo: "));
				this.add(this.txtCargo);
				this.add(new qx.ui.basic.Label("Lugar de Trabajo: "));
				this.add(this.txtLugarTrabajo);
				this.add(new qx.ui.basic.Label("CBU: "));
				this.add(this.txtCBU);

				if (idPersona) {
					var persona = this.getPersona(idPersona);
					this.showPersona(persona);
				}
				
				/* cargamos los botones de actualizacion */
				var content = new qx.ui.container.Composite(new qx.ui.layout.HBox(4).set({alignX : "center"}))
				content.add(this.btnAceptar);
				content.add(this.btnCancelar);
				this.add(content);
			},

			members : {
				txtDni : null,
				txtNroControl1 : null,
				txtNroControl2 : null,
				txtApellido : null,
				txtNombre : null,
				dtFechaNacimiento : null,
				txtDomicilio : null,
				txtCP : null,
				filterLocalidad : null,
				txtCargo : null,
				txtLugarTrabajo : null,
				txtCBU : null,

				persistSuccess : null,

				btnAceptar : null,
				btnCancelar : null,

				/* methods */
				setDni : function(dni) {
					this.txtDni.setValue(dni);
				},
				setNroControl1 : function(nroControl) {
					this.txtNroControl1.setValue(nroControl);
				},
				setNroControl2 : function(nroControl) {
					this.txtNroControl2.setValue(nroControl);
				},
				setApellido : function(apellido) {
					this.txtApellido.setValue(apellido);
				},
				setNombre : function(nombre) {
					this.txtNombre.setValue(nombre);
				},
				setFechaNacimiento : function(fechaNacimiento) {
					if (!fechaNacimiento || fechaNacimiento == '0000-00-00') 
						return;
					var objDate = mutual.utilities.getDateObject(fechaNacimiento);
					this.dtFechaNacimiento.setValue(objDate);
				},
				setDomicilio : function(domicilio) {
					this.txtDomicilio.setValue(domicilio);
				},
				setCodigoPostal : function(codigoPostal) {
					this.txtCP.setValue(codigoPostal);
				},
				setLocalidad : function(localidad) {
					if(!localidad || localidad == 0) {
						return;
					}
					this.filterLocalidad.setLocalidad(parseInt(localidad));
				},
				setCargo : function(cargo) {
					this.txtCargo.setValue(cargo);
				},
				setLugarTrabajo : function(lugarTrabajo) {
					this.txtLugarTrabajo.setValue(lugarTrabajo);
				},
				setCBU : function(cbu) {
					this.txtCBU.setValue(cbu);
				},

				getDni : function() {
					var valor = this.txtDni.getValue();
					return this.txtDni.getValue();
				},
				getNroControl1 : function() {
					return this.txtNroControl1.getValue();
				},
				getNroControl2 : function() {
					return this.txtNroControl2.getValue();
				},
				getApellido : function() {
					return this.txtApellido.getValue();
				},
				getNombre : function() {
					return this.txtNombre.getValue();
				},
				getFechaNacimiento : function() {
					return this.dtFechaNacimiento.getValue();
				},
				getDomicilio : function() {
					return this.txtDomicilio.getValue();
				},
				getCodigoPostal : function() {
					return this.txtCP.getValue();
				},
				getLocalidad : function() {
					var idLocalidad = this.filterLocalidad.getSelectedEntity().value;
					return idLocalidad;
				},
				getCargo : function() {
					return this.txtCargo.getValue();
				},
				getLugarTrabajo : function() {
					return this.txtLugarTrabajo.getValue();
				},
				getCBU : function() {
					return this.txtCBU.getValue();
				},
				getPersona : function(idPersona) {
					var rpc = new qx.io.remote.Rpc("services/","mutual.Persona");
					var persona = rpc.callSync("getPersona", idPersona);
					return persona;
				},
				showPersona : function(persona) {
					this.setDni(persona.dni);
					this.setNroControl1(persona.nro_control1);
					this.setNroControl2(persona.nro_control2);
					this.setApellido(persona.apellido);
					this.setNombre(persona.nombre);
					this.setFechaNacimiento(persona.fecha_nacimiento);
					this.setDomicilio(persona.domicilio);
					this.setCodigoPostal(persona.cp);
					this.setLocalidad(persona.id_localidad);
					this.setCargo(persona.cargo);
					this.setLugarTrabajo(persona.lugar_trabajo);
					this.setCBU(persona.cbu);
				},
				persistPersona : function(idPersona) {
					try{
						var nuevo = !(idPersona);
						var persona = {
							id_persona : idPersona,
							dni : this.getDni(),
							nro_control1 : this.getNroControl1(),
							nro_control2 : this.getNroControl2(),
							apellido : this.getApellido(),
							nombre : this.getNombre(),
							fecha_nacimiento : this.getFechaNacimiento(),
							domicilio : this.getDomicilio(),
							cp : this.getCodigoPostal(),
							id_localidad : this.getLocalidad(),
							cargo : this.getCargo(),
							lugar_trabajo : this.getLugarTrabajo(),
							cbu : this.getCBU()
						};
						if (!this.validate(persona)){
							return;
						}
						var method = (nuevo) ? "insertPersona" : "editPersona";
						var rpc = new qx.io.remote.Rpc("services/" , "mutual.Persona");
						var response = rpc.callSync(method, persona);
						this.persistSuccess();
						this.destroy();
					}catch(x){
						alert(x);
					}
				},
				
				validate : function(persona){
					if (!persona.dni | persona.dni == 0){
						alert("Falta ingresar el Dni");
						this.txtDni.focus();
						return false;
					}else if(!mutual.utilities.isNumeric(persona.dni) || parseInt(persona.dni) <= 0){
						alert("El Dni no tiene el formato correcto");
						this.txtDni.focus();
						return false;
					}else if(!persona.apellido){
						alert("Falta ingresar el Apellido");
						this.txtApellido.focus();
						return false;
					}else if(!persona.nombre){
						alert("Falta ingresar el Nombre");
						this.txtNombre.focus();
						return false;
					}else{
						return true;
					}
				}
			}
		});
